package com.xxxtea.config.converter;

import cn.hutool.core.util.StrUtil;
import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.data.ReadCellData;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.metadata.property.ExcelContentProperty;

import java.util.ArrayList;

/**
 * EasyExcel-List类转换器
 * 
 * 用于在使用EasyExcel进行Excel导入导出时，实现ArrayList<String>与Excel单元格字符串之间的相互转换。
 * 支持以逗号分隔的字符串与字符串列表的互转。
 * 
 * @author badman
 * @since 1.0.0
 */
public class ListConverter implements Converter<ArrayList<String>> {
	/** 分隔符，默认为英文逗号 */
	private final String SPLIT = ",";

	/**
	 * 支持的Java类型：ArrayList
	 */
	@Override
	public Class<?> supportJavaTypeKey() {
		return ArrayList.class;
	}

	/**
	 * 支持的Excel类型：字符串
	 */
	@Override
	public CellDataTypeEnum supportExcelTypeKey() {
		return CellDataTypeEnum.STRING;
	}

	/**
	 * Excel字符串转为Java字符串列表
	 * 
	 * @param cellData 单元格数据
	 * @param contentProperty 字段属性
	 * @param globalConfiguration 全局配置
	 * @return 字符串列表
	 */
	@Override
	public ArrayList<String> convertToJavaData(ReadCellData<?> cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
		return new ArrayList<>(StrUtil.split(cellData.getStringValue(), SPLIT));
	}

	/**
	 * Java字符串列表转为Excel字符串
	 * 
	 * @param value 字符串列表
	 * @param contentProperty 字段属性
	 * @param globalConfiguration 全局配置
	 * @return 单元格数据
	 */
	@Override
	public WriteCellData<?> convertToExcelData(ArrayList<String> value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
		return new WriteCellData<>(CellDataTypeEnum.STRING, StrUtil.join(SPLIT, value));
	}
}
